package cn.itsource.user.service.impl;

import cn.itsource.basic.SystemContents;
import cn.itsource.basic.utils.RedisUtils;
import cn.itsource.basic.utils.StrUtils;
import org.springframework.stereotype.Service;

@Service
public class CodeServiceImpl {


    /*
       1. 接收手机号
       2. 产生一个验证码  4  或者 6 为数字随机数
       3. 给对应的手机发送验证码---》中国网建

       4.验证码存储问题
         redis --(设置过期时间)
         4.1 用什么作为key
           业务键+手机号作为key
         4.2 如何判断重发的时间隔小于一分钟

         4.3 有效期是5分钟   在第2-5分钟之间用户点击重发，发送上一次的验证码 还是发送一个新的验证码

         4.4 如果是个新的，哪一个有效  还是都有效

         4.5 把上一次的验证码 重新发送一次

    */
    public void sendCodeService(String phone) throws Exception{

            //生成一个验证码
            String code = StrUtils.getRandomString(6);
            //1.去redis里面获取验证码
            String redisCode = RedisUtils.INSTANCE.get(SystemContents.USER_REG + ":" + phone);
            if(redisCode!=null){//redis里面有 数据
                //判断两次请求的时间间隔
                Long startTime = Long.valueOf(redisCode.split(":")[1]);
                if((System.currentTimeMillis()-startTime)<=60*1000){
                    //告知用户发送的时间间隔太小
                   throw  new Exception("请不要在1分钟内多次发送");
                }else {
                    //如果大于一分钟  小于5分钟  重新发送上一次发送的验证码
                    code=redisCode.split(":")[0];
                }
            }
            //把验证码存储到redis里面
            /*
                     key                               value
                 user_reg:15008495702                452569:16416946846
             */
            RedisUtils.INSTANCE.set(SystemContents.USER_REG+":"+phone,code+":"+System.currentTimeMillis(),60*5);

            System.out.println("本次的验证码为："+code);
            //发送短信
           // SendMsg.sendCode(phone,code);
    }
}
